在第 17 天,我們將專注於學習如何處理用戶輸入,這是讓 Line Bot 能夠更智能地與用戶互動的基礎。通過這些步驟,你可以讓 Bot 根據用戶的輸入做出不同的響應,並實現基本的對話流程。
接收文本消息:
MessageEvent
來實現的。例子:
@handler.add(MessageEvent, message=TextMessage)
def handle_text_message(event):
user_message = event.message.text # 獲取用戶發送的文字內容
reply_message = f"你剛才說了: {user_message}" # 構建回覆內容
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
關鍵詞匹配:
例子:
if "天氣" in user_message:
reply_message = "今天的天氣是晴天!"
elif "時間" in user_message:
reply_message = "現在的時間是 " + datetime.now().strftime('%H:%M:%S')
else:
reply_message = "抱歉,我不明白你的意思。"
模式識別:
例子:
import re
if re.match(r'\d+ \+ \d+', user_message):
numbers = list(map(int, re.findall(r'\d+', user_message)))
result = sum(numbers)
reply_message = f"計算結果:{result}"
圖片消息:
例子:
@handler.add(MessageEvent, message=ImageMessage)
def handle_image_message(event):
reply_message = "收到你的圖片了!"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
其他消息類型:
例子:
@handler.add(MessageEvent, message=LocationMessage)
def handle_location_message(event):
latitude = event.message.latitude
longitude = event.message.longitude
reply_message = f"你的位置是經度 {longitude}, 緯度 {latitude}"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
為了能夠根據用戶的上下文進行回應,你可能需要儲存用戶的狀態。例如,用戶可能會先問一個問題,然後在後續的對話中進行跟進。你可以使用字典或資料庫來存儲用戶的狀態,實現連續對話。
例子:
user_states = {}
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
user_id = event.source.user_id
user_message = event.message.text
if user_id not in user_states:
user_states[user_id] = "等待問題"
if user_states[user_id] == "等待問題":
user_states[user_id] = "回答問題"
reply_message = "請問有什麼問題我可以幫忙?"
elif user_states[user_id] == "回答問題":
reply_message = f"關於 {user_message} 的問題我會幫你找答案。"
user_states[user_id] = "等待問題"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))